In a computing environment, a computing system may communicate with one or more other computing systems by transmitting data to the other computing systems in data packets.
In an acknowledgement-based, or ACK-based communication protocol, a sender generates a packet, saves the packet in a history queue, and transmits the packet to one or more receivers. If the sender does not receive an ACK, or a message acknowledging successful transmission of the packet, from each of the receivers within a certain period of time, the sender re-transmits the packet to all the receivers. Upon receiving an ACK from all of the receivers, the sender removes the packet from the history queue.
Additionally, if a receiver fails or is otherwise prevented from receiving a packet, the sender cannot remove the packet from the history queue because the removal of the packet from the sender's history queue is contingent upon the sender determining that all the intended receivers acknowledge the receipt of the packet. Thus, if one from among many of the receivers cannot acknowledge receipt of a packet that packet remains in the history queue and is retransmitted. This phenomenon may lead to delays, unnecessary re-transmissions, large memory consumption, or lost packets.
Furthermore, there are potential scalability problems because each receiver must constantly send ACKs to the sender. Though existing modifications to the ACK protocol (e.g., ACK trees) may reduce the scalability problems, these modifications require additional resources and present configuration issues.
A negative acknowledgment-based, or NAK-based protocol, is more scalable and requires no configuration. Under a NAK-based protocol, a sender generates a packet, saves the packet in a history queue, and transmits the packet to one or more receivers. If the sender receives a NAK, or a message indicating that the packet has been lost (i.e., not correctly received) from a receiver, the sender re-transmits the packet to the receiver. The sender removes packets from the history queue according to a cleaning mechanism (e.g., based on memory consumption).
A NAK-based protocol, however, is less reliable than an ACK-based protocol because the sender may remove a packet from the history queue according to a cleaning mechanism before receiving a NAK from a receiver that has not received the packet. In such a case, a receiver that has not received the lost packet will never receive the lost packet as it is no longer stored in the sender's history queue and thus it cannot be retransmitted. Systems and methods are needed that can overcome the aforementioned shortcomings.